package models

import (
	"fmt"
)

func (rt *RunTime) Func位置移动(x, y, z int32) {
	//在这里要判断，是否还在副本中，如果已经不在副本中，则转回默认空间
	if rt.V角色内容.V空间.判断坐标是否在当前空间(x, y) == false {
		rt.消息_系统消息(3, "移动位置不在当前空间，您将到达默认空间")
		m_默认空间.F添加内容(E类别_人物, x, y, z, 0, rt.V角色内容)
	}
	tx := CreateBuff(14)
	tx.AddInt16(0x00C7)
	tx.AddInt32(x)
	tx.AddInt32(y)
	tx.AddInt32(z)
	rt.AddHeadSend10(0x0A, [][]byte{{}, tx.Buff})
	rt.V角色内容.F内容移动(x, y)
}

//功能
//注意 这里的x,y是游戏位置
func (rt *RunTime) 位置_位置登记(位置名称 string, x, y int32) error {
	address := &Struct位置登记{}
	address.Name = 位置名称
	address.Uid = rt.V角色.Id
	address.X = x
	address.Y = y
	if _, err := db.Insert(address); err != nil {
		return err
	}
	tx := CreateBuff(40)
	tx.AddInt16(0x20)
	tx.AddInt32(address.Id)
	tx.AddStringAndLen(fmt.Sprintf("(%d,%d)", x, y))
	tx.AddStringAndLen(address.Name)
	rt.AddHeadSend10(0x0A, [][]byte{{}, tx.Buff})
	rt.V位置登记[address.Id] = address
	return nil
}

func 位置_获取位置(x, y int32) *Struct区域定义 {
	for _, v := range m_区域定义 {
		if x < v.X0 {
			continue
		}
		if x > v.X1 {
			continue
		}
		if y < v.Y0 {
			continue
		}
		if y > v.Y1 {
			continue
		}
		return v
	}
	return nil
}
func (rt *RunTime) 位置登记_输出所有位置() {
	tx := CreateBuff(1024)
	tx.AddInt16(0x21)
	p := len(tx.Buff)
	tx.AddInt32(0)
	plen := 0
	for k, v := range rt.V位置登记 {
		tx.AddInt32(k)
		tx.AddStringAndLen(fmt.Sprintf("(%d,%d)", v.X, v.Y))
		tx.AddStringAndLen(v.Name)
		plen++
	}
	tx.Buff[p] = byte(plen)
	rt.AddHeadSend10(0x0A, [][]byte{{}, tx.Buff})
}
